package com.webtest.jsptest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;

/**
 * @author lzy
 * @version v1.0
 * Create DateTime: 2018/7/23 9:16
 */
public class TestServlet implements Servlet {
    private static final Logger LOGGER = LoggerFactory.getLogger(TestServlet.class);

    /**
     * 只被调用一次，只有第一次请求Srevlet的时，创建Servlet实例，调用构造器。
     * 说明Servlet是单实例的！！
     */
    public TestServlet() {
        System.out.println("TestServiet constructor");
    }

    /**
     * ServletConfig封装了Servlet的配置信息，并且可以获取ServletContext对象
     * ServletConfig是一个接口，由http容器具体实现，例如tomcat实现了该接口提供具体功能
     * 1. 配置Servlet的初始化参数
     * 2. 获取初始化参数：
     * - getInitParameter(String name):返回指定名称的参数值
     * - getInitParameterNames(): 返回参数名称列表：Enumeration<String>
     * - getServletContext(): 返回Servlet上下文信息
     * <p>
     * ServletContext代表当前web应用， 可以认为是当前Web用用的一个大管家，可以从中获取当前web应用的各方面的信息
     * <p>
     * Context参数可以被所有的servlet使用，而servlet参数只能对自己可见
     * 1.获取context配置参数
     * 2.获取当前WEB应用的某一个文件的绝对路径，而不是部署前的文件路径
     * getRealPath(String path);
     * 3.获取当前WEB应用的context路径
     * 4.获取当前WEB与应用的某一个文件对应的输入流
     *
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init");
        String userName = servletConfig.getInitParameter("user");
        LOGGER.info("user:" + userName);

        Enumeration<String> parms = servletConfig.getInitParameterNames();
        while (parms.hasMoreElements()) {
            String parmName = parms.nextElement();
            LOGGER.info(parmName + ":" + servletConfig.getInitParameter(parmName));
        }

        LOGGER.info(servletConfig.getServletName());

        // 获取ServletContext对象
        LOGGER.info("----------------------------");
        ServletContext context = servletConfig.getServletContext();
        Enumeration<String> names = context.getInitParameterNames();
        while (names.hasMoreElements()) {
            String name = names.nextElement();
            LOGGER.info(name + ":" + context.getInitParameter(name));
        }

        LOGGER.info(context.getRealPath("/pic01.jpg"));

        LOGGER.info("当前服务的路径：" + context.getContextPath());

        /*
        InputStream in = context.getResourceAsStream("/appConfig.properties");
        LOGGER.info("1." + in);
        Properties properties = new Properties();
        try {
            properties.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }*/
    }

    @Override
    public ServletConfig getServletConfig() {
        System.out.println("get servlet config");
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service");
    }

    @Override
    public String getServletInfo() {
        System.out.println("get servlet info");
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}
